from SplineDataService import _cubic_spline
from openpyxl.styles import Font, Border, Side, PatternFill, colors, Alignment
import logging as log

# 日志格式化
log.basicConfig(format='%(asctime)s ---- [line:%(lineno)d] ---- %(levelname)s: %(message)s', level=log.info)


def get_excel_data_by_sequentially_processed(excel_data, row_index, days, types, data_start, data_index):
    """
    根据参数获取excel中的数据
    :param excel_data: excel操作对象
    :param row_index: 第几行的数据
    :param days: 所取数据的时间序列周期
    :param types: 所取数据一共有多少种类型
    :param data_start: 所取数据起始列
    :param data_index: 所取的数据在一组数据中排第几，从0开始
    :return: 返回时间序列数据
    """
    data_list = []
    data_server_column = []
    for day_index in range(0, days, 1):
        # 基础增长列
        data_column = data_start + types * day_index + data_index
        # 记录数据处理的列数
        data_server_column.append(data_column)
        data_value = excel_data.cell(column=data_column, row=row_index).value
        data_list.append(data_value)
    log.info("处理前数据：")
    log.info(data_list)
    # 调用方法处理后的数据
    (spline_point_array, none_data_array) = _cubic_spline(data_list)
    log.info("处理后数据：")
    log.info(spline_point_array)
    log.info(none_data_array)
    if spline_point_array is not None and len(spline_point_array) != 0:
        log.info("进入循环===============")
        #  判断不为空的时候进入这个方法
        for item in range(0, len(none_data_array)):
            log.info("第" + str(item) + "次循环")
            # 空值所在下标
            none_data_index = none_data_array[item]
            log.info("空值所在下标：" + str(none_data_index))
            #  取出空值excel列
            none_column = data_server_column[none_data_index]
            log.info("excel列：" + str(none_column))
            # 获取差值数据
            none_data = spline_point_array[item]
            log.info("数据：" + str(none_data))
            # 设置值和样式
            set_excel_value(excel_data, row_index, none_column, none_data)
        log.info("结束循环===============")
    else:
        log.info("数据不需要处理")


def set_excel_value(excel_data, row_index, column_index, data):
    """
    设置excel值
    :param data:
    :param excel_data:
    :param row_index:
    :param column_index:
    :return:
    """
    excel_data.cell(row=row_index, column=column_index).value = data

    excel_data.cell(row=row_index, column=column_index).font = Font(name="微软雅黑", size=11, bold=True, color="EEA2A4")
